package ar.edu.utn.frgp.TPFinalBanco.action;

import java.math.BigDecimal;
import java.util.List;

import ar.edu.utn.frgp.TPFinalBanco.model.Cliente;
import ar.edu.utn.frgp.TPFinalBanco.model.Cuenta;
import ar.edu.utn.frgp.TPFinalBanco.service.impl.GestionCuentaServiceImpl;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.ValidatorType;

public class ModificoCuentaAction extends BaseAction {

	private static final long serialVersionUID = -4487081772280710306L;
	private String descubierto;
	private Cuenta cuenta;

	public String execute() throws Exception {

		if (new BigDecimal(descubierto).compareTo(new BigDecimal(0)) == 1) {

			GestionCuentaServiceImpl cuentaService = (GestionCuentaServiceImpl) getContext()
					.getBean("gestionCuentasService");

			String nroCuenta = (String) ActionContext.getContext().getSession()
					.get("cuentaModificar");
			cuenta = cuentaService.getCuenta(new Integer(nroCuenta));
			cuenta.setDescubierto(new BigDecimal(descubierto));

			// lo guardamos en la BD
			cuentaService.updateCuenta(cuenta);

			// Actualizo la cuenta en la sesion
			Cliente cliente = (Cliente) ActionContext.getContext().getSession()
					.get("cliente");
			List<Cuenta> cuentas = cliente.getCuentas();

			for (Cuenta cuentaCliente : cuentas) {
				if (cuentaCliente.getNroCuenta().equals(cuenta.getNroCuenta())) {
					cuentaCliente.setDescubierto(new BigDecimal(descubierto));
				}
			}

			cliente.setCuentas(cuentas);
			ActionContext.getContext().getSession().put("cliente", cliente);

			return SUCCESS;

		} else {
			String errorMsg = String
					.format("El descubierto Ingresado es Incorrecto.");
			addActionError(errorMsg);
			return ERROR;
		}

	}

	public String getDescubierto() {
		return descubierto;
	}

	@RegexFieldValidator(message = "El monto debe ser del tipo nnn,nn", shortCircuit = true, expression = "^[0-9]+(,[0-9]{1,2})?$")
	@RequiredStringValidator(message = "Campo Obligatorio: Debe ingresar un monto", type = ValidatorType.FIELD, shortCircuit = true, fieldName = "descubierto", trim = true)
	public void setDescubierto(String descubierto) {
		this.descubierto = descubierto;
	}

	public Cuenta getCuenta() {
		return cuenta;
	}

	public void setCuenta(Cuenta cuenta) {
		this.cuenta = cuenta;
	}

}
